package cn.techwis.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor
@Data
@Builder
@AllArgsConstructor
public class QueryOrderDTO {


    /**
     * 应用ID
     */
    private String appid;
    /**
     * 直连商户号
     */
    private String mchid;
    /**
     * 商户订单号
     */
    private String out_trade_no;
    /**
     * 微信支付订单号
     */
    private String transaction_id;
    /**
     * +订单金额
     */
    private AmountVO amount;
    /**
     * 交易状态 交易状态，枚举值：
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（付款码支付）
     * USERPAYING：用户支付中（付款码支付）
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     * ACCEPT：已接收，等待扣款
     * 示例值：SUCCESS
     */
    private String trade_state;
    /**
     * 付款银行
     */
    private String bank_type;
    /**
     * 优惠功能
     */
    private List<PromotionDetailVO> promotion_detail;
    /**
     * 支付完成时间
     */
    private String success_time;
    /**
     * 支付者
     */
    private PayerVO payer;

    /**
     * 交易状态描述
     */
    private String trade_state_desc;
    /**
     * 交易类型，枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    private String trade_type;
    /**
     * 附加数据
     */
    private String attach;
    /**
     * +场景信息
     */
    private SceneInfoVO scene_info;

    @NoArgsConstructor
    @Data
    @Builder
    @AllArgsConstructor
    public static class AmountVO {
        /**
         * payer_total : 100
         * total : 100
         * currency : CNY
         * payer_currency : CNY
         */
        /**
         * 用户支付金额
         */
        private int payer_total;
        /**
         * 总金额
         */
        private int total;
        /**
         * 货币类型  	CNY：人民币，境内商户号仅支持人民币。
         */
        private String currency;
        /**
         * 用户支付币种 CNY
         */
        private String payer_currency;
    }

    @NoArgsConstructor
    @Data
    @Builder
    @AllArgsConstructor
    public static class PayerVO {
        /**
         * openid : oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
         */
        private String openid;
    }

    @NoArgsConstructor
    @Data
    @Builder
    @AllArgsConstructor
    public static class SceneInfoVO {
        /**
         * 商户端设备号
         */
        private String device_id;
    }

    @NoArgsConstructor
    @Data
    @Builder
    @AllArgsConstructor
    public static class PromotionDetailVO {

        /**
         * 优惠券面额
         */
        private int amount;
        /**
         * 微信出资
         */
        private int wechatpay_contribute;
        /**
         * 券ID
         */
        private String coupon_id;
        /**
         * 优惠范围  GLOBAL：全场代金券
         * SINGLE：单品优惠
         * 示例值：GLOBAL
         */
        private String scope;
        /**
         * 商户出资
         */
        private int merchant_contribute;
        /**
         * 优惠名称
         */
        private String name;
        /**
         * 其他出资
         */
        private int other_contribute;
        /**
         * 优惠币种 CNY
         */
        private String currency;
        /**
         * 活动ID
         */
        private String stock_id;
        /**
         * 单品列表信息
         */
        private List<GoodsDetailVO> goods_detail;
        /**
         * 优惠类型 CASH：充值
         * NOCASH：预充值
         * 示例值：CASH
         */
        private String type;

        @NoArgsConstructor
        @Data
        @Builder
        @AllArgsConstructor
        public static class GoodsDetailVO {
            /**
             * 商品备注
             */
            private String goods_remark;
            /**
             * 商品数量
             */
            private int quantity;
            /**
             * 商品优惠金额
             */
            private int discount_amount;
            /**
             * 商品编码
             */
            private String goods_id;
            /**
             * 商品单价
             */
            private int unit_price;
        }
    }
}
